#include "matrix_key.h"
#include "BS8112A3.h"

void matrix_key_init(void) {
    HAL_GPIO_WritePin(ROW1_PORT, ROW1_PIN, GPIO_PIN_SET);
    HAL_GPIO_WritePin(ROW2_PORT, ROW2_PIN, GPIO_PIN_SET);
    HAL_GPIO_WritePin(ROW3_PORT, ROW3_PIN, GPIO_PIN_SET);
    HAL_GPIO_WritePin(ROW4_PORT, ROW4_PIN, GPIO_PIN_SET);
    HAL_GPIO_WritePin(COL1_PORT, COL1_PIN, GPIO_PIN_SET);
    HAL_GPIO_WritePin(COL2_PORT, COL2_PIN, GPIO_PIN_SET);
    HAL_GPIO_WritePin(COL3_PORT, COL3_PIN, GPIO_PIN_SET);
}

void matrix_output(uint8_t key_num)
{
    matrix_key_init();
    switch (key_num)    
    {
        case 1:
            HAL_GPIO_WritePin(ROW1_PORT, ROW1_PIN, GPIO_PIN_RESET);
            HAL_GPIO_WritePin(COL1_PORT, COL1_PIN, GPIO_PIN_RESET);
            break;
        case 2:
            HAL_GPIO_WritePin(ROW1_PORT, ROW1_PIN, GPIO_PIN_RESET);
            HAL_GPIO_WritePin(COL2_PORT, COL2_PIN, GPIO_PIN_RESET);
            break;
        case 3:
            HAL_GPIO_WritePin(ROW1_PORT, ROW1_PIN, GPIO_PIN_RESET);
            HAL_GPIO_WritePin(COL3_PORT, COL3_PIN, GPIO_PIN_RESET);
            break;
        case 4:
            HAL_GPIO_WritePin(ROW2_PORT, ROW2_PIN, GPIO_PIN_RESET);
            HAL_GPIO_WritePin(COL1_PORT, COL1_PIN, GPIO_PIN_RESET);
            break;
        case 5:
            HAL_GPIO_WritePin(ROW2_PORT, ROW2_PIN, GPIO_PIN_RESET);
            HAL_GPIO_WritePin(COL2_PORT, COL2_PIN, GPIO_PIN_RESET);
            break;
        case 6:
            HAL_GPIO_WritePin(ROW2_PORT, ROW2_PIN, GPIO_PIN_RESET);
            HAL_GPIO_WritePin(COL3_PORT, COL3_PIN, GPIO_PIN_RESET);
            break;
        case 7:
            HAL_GPIO_WritePin(ROW3_PORT, ROW3_PIN, GPIO_PIN_RESET);
            HAL_GPIO_WritePin(COL1_PORT, COL1_PIN, GPIO_PIN_RESET);
            break;
        case 8:
            HAL_GPIO_WritePin(ROW3_PORT, ROW3_PIN, GPIO_PIN_RESET);
            HAL_GPIO_WritePin(COL2_PORT, COL2_PIN, GPIO_PIN_RESET);
            break;
        case 9:
            HAL_GPIO_WritePin(ROW3_PORT, ROW3_PIN, GPIO_PIN_RESET);
            HAL_GPIO_WritePin(COL3_PORT, COL3_PIN, GPIO_PIN_RESET);
            break;
        case 10:
            HAL_GPIO_WritePin(ROW4_PORT, ROW4_PIN, GPIO_PIN_RESET);
            HAL_GPIO_WritePin(COL1_PORT, COL1_PIN, GPIO_PIN_RESET);
            break;
        case 11:
            HAL_GPIO_WritePin(ROW4_PORT, ROW4_PIN, GPIO_PIN_RESET);
            HAL_GPIO_WritePin(COL2_PORT, COL2_PIN, GPIO_PIN_RESET);
            break;
        case 12:
            HAL_GPIO_WritePin(ROW4_PORT, ROW4_PIN, GPIO_PIN_RESET);
            HAL_GPIO_WritePin(COL3_PORT, COL3_PIN, GPIO_PIN_RESET);
            break;
        default:
            break;
    }
}